//
//  CZEmoticonPackageModel.swift
//  表情键盘新工程-74.准备
//
//  Created by itcast on 16/5/22.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

// 表情包模型,用来管理多个表情模型
class CZEmoticonPackageModel: NSObject {

    // 表情包文件夹名称
    var id: String
    
    // 表情包名称
    var group_name_cn: String
    
    // 所有表情模型
    var emoticons: [CZEmoticonModel]
    
    // 多页表情模型,一个有多个模型[CZEmoticonModel], 多页: [[CZEmoticonModel]]
    var pageEmotions: [[CZEmoticonModel]] = [[CZEmoticonModel]]()
    
    init(id: String, group_name_cn: String, emoticons: [CZEmoticonModel]) {
        self.id = id
        self.group_name_cn = group_name_cn
        self.emoticons = emoticons
        super.init()
        
        // 将所有表情模型分成多页,到一个cell要显示的时候,直接将这页数据给cell就好了
        spliteEmoticons()
    }
    
    /// 将所有表情模型拆分成多页
    private func spliteEmoticons() {
        // 计算有多少页 = (总数 + 一页的个数 - 1) / 一页个数
        // 1 = (19 + 20 - 1) / 20
        // 2 = (21 + 20 - 1) / 20
        // 2 = (40 + 20 - 1) / 20
        let pageCount = (emoticons.count + CZEmoticonNumberOfPage - 1) / CZEmoticonNumberOfPage
        
        // 默认这组没有表情,需要创建一个空的数组
        if pageCount == 0 {
            let emptyPageEmoticon = [CZEmoticonModel]()
            pageEmotions.append(emptyPageEmoticon)
            return
        }
        
        // 一页一页来拆
        for i in 0..<pageCount {
            let location = i * CZEmoticonNumberOfPage
            
            // 长度不能写死,在最后一页的时候会越界
            var length = CZEmoticonNumberOfPage
            
            // 如果location + length 大于 总个数,表示越界了,重新计算 length
            if location + CZEmoticonNumberOfPage > emoticons.count {
                // length = 总数 - 起始值
                length = emoticons.count - location
            }
            
            let range = NSRange(location: location, length: length)
            
            // 截取数组, 重一个数组里面根据范围截取需要的数组
            let pageEmoticon = (emoticons as NSArray).subarrayWithRange(range) as! [CZEmoticonModel]
//            print("第\(i)页, pageEmoticon: \(pageEmoticon)")
            pageEmotions.append(pageEmoticon)
        }
    }
    
    // 对象打印方法
    override var description: String {
        get {
            return "\n \t 表情包模型: id: \(id), group_name_cn: \(group_name_cn), emoticons: \(emoticons)"
        }
    }
}
